<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class prospectos extends MY_Controller {
	/**
	 * Evita la validacion (enfocado cuando se usa ajax). Ver mas en privilegios_model
	 * @var unknown_type
	 */
	private $excepcion_privilegio = array('prospectos/imprimir/', 'prospectos/parche_ordentopros/');
	
	public function _remap($method){
		$this->carabiner->css(array(
				array('libs/jquery-ui.css', 'screen'),
				array('libs/ui.notify.css', 'screen'),
				array('libs/jquery.treeview.css', 'screen'),
				array('base.css', 'screen')
		));
		$this->carabiner->js(array(
				array('libs/jquery.min.js'),
				array('libs/jquery-ui.js'),
				array('libs/jquery.notify.min.js'),
				array('libs/jquery.treeview.js'),
				array('general/alertas.js')
		));
		
		$this->load->model("empleados_model");
		if($this->empleados_model->checkSession()){
			$this->empleados_model->excepcion_privilegio = $this->excepcion_privilegio;
			$this->info_empleado = $this->empleados_model->getInfoEmpleado($_SESSION['id_empleado'], true);
			if($this->empleados_model->tienePrivilegioDe('', get_class($this).'/'.$method.'/')){
				$this->{$method}();
			}else
				redirect(base_url('panel/home?msg=1'));
		}else
			redirect(base_url('panel/home'));
	}

	/**
	 * Parche para migrar las ordenes de trabajo a prospectos
	 * @return [type] [description]
	 */
	public function parche_ordentopros(){
		$res = $this->db->query("select * from ordenest where tiene_products = 't' and status <> 'ca'");
		$data = array();
		foreach ($res->result() as $key => $value) {
			
			$id_prosp = BDUtil::getId();
			$data = array(
				'id_prospecto' => $id_prosp,
				'id_cliente'   => $value->id_cliente,
				'id_vendedor'  => $value->id_vendedor,
				'id_usuario'   => $value->id_usuario,
				'serie'        => $value->serie,
				'folio'        => $value->folio,
				'fecha'        => String::suma_fechas($value->fecha, 365),
				'subtotal'     => $value->subtotal,
				'importe_iva'  => $value->importe_iva,
				'total'        => $value->total,
			);
			$this->db->insert('prospectos', $data);

			$data_productos = array();
			$result = $this->db->query("SELECT * FROM ordenest_productos WHERE id_ordent = '".$value->id_ordent."'");
			foreach ($result->result() as $key2 => $value2) {
				$data_productos[] = array(
					'id_prospecto'    => $id_prosp,
					'id_producto'     => $value2->id_producto,
					'taza_iva'        => $value2->taza_iva,
					'cantidad'        => $value2->cantidad,
					'precio_unitario' => $value2->precio_unitario,
					'importe'         => $value2->importe,
					'importe_iva'     => $value2->importe_iva,
					'total'           => $value2->total,
				);
			}
			if(count($data_productos) > 0){
				$this->db->insert_batch('prospectos_productos', $data_productos);
			}

			echo 'Orden '.$value->id_ordent.' Ok<br>';
		}

	}
	
	/**
	 * Default. Mustra el listado de cotizaciones para administrarlas
	 */
	public function index(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('libs/jquery.superbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.superbox.js'),
			array('prospectos/listado.js'),
			array('general/msgbox.js')
		));
		$this->load->library('pagination');
		
		$params['info_empleado'] 	= $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] 	= 'Ventas'; //activa la opcion del menu
		$params['seo'] 				= array('titulo' => 'Administrar prospectos de venta');
		
		$this->load->model('prospectos_model');
		$params['cotiza'] = $this->prospectos_model->getProspectos();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/prospectos/listado', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Agrega una cotizacion a la bd
	 */
	public function agregar(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('prospectos/frm_addmod.js')
		));
		
		$params['info_empleado'] 	= $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] 	= 'Ventas'; //activa la opcion del menu
		$params['seo'] 				= array('titulo' => 'Agregar Prospecto');
		$params['pagar_compra'] 	= false;
		
		$this->configAddModCotizacion();
		$this->load->model('prospectos_model');
		
		if($this->form_validation->run() == FALSE){
			$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
		}else{
			$respons = $this->prospectos_model->addProspecto();
			
			if($respons[0]){
				redirect(base_url('panel/prospectos/agregar/?'.String::getVarsLink(array('msg')).'&msg=4'));
			}
		}
		
		$params['fecha'] = date("Y-m-d");
		$params['folio'] = $this->prospectos_model->getFolioProsp();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/prospectos/agregar', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * muesta la info de una cotizacion sin dejar editar la info
	 */
	public function ver(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('compras/frm_addmod.js')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Ver Cotizacion'
		);
		
		if(isset($_GET['id']{0})){
			/*$this->configAddModCotizacion();
			
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
			}else{
				$respons = $this->empleados_model->updatePrivilegio();
				
				if($respons[0])
					redirect(base_url('panel/privilegios/modificar/?'.String::getVarsLink(array('msg')).'&msg=3'));
			}*/
			$this->load->model('prospectos_model');
			$params['inf'] = $this->prospectos_model->getInfoCotizacion($_GET['id']);
			if(!is_array($params['inf']))
				unset($params['inf']);
			
			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/prospectos/ver', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Elimina una cotizacion de la bd (le cambia el status a e:eliminada)
	 */
	public function eliminar(){
		if(isset($_GET['id']{0})){
			$this->load->model('prospectos_model');
			$respons = $this->prospectos_model->cancelaProspecto();
			
			if($respons[0])
				redirect(base_url('panel/prospectos/?msg=5'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	/**
	 * Imprime la cotizacion
	 */
	public function imprimir(){
		if(isset($_GET['id']{0})){
			//Cotizacion
			$res = $this->db
				->select('id_prospecto, id_cliente, id_vendedor, serie, folio, Date(fecha) AS fecha, subtotal')
				->from('prospectos')
				->where("id_prospecto = '".$_GET['id']."'")
			->get();
			$data_cotiza = $res->row();
			$res->free_result();
			
			//productos
			$res = $this->db
				->select('p.id_producto, p.codigo, p.nombre, cp.taza_iva, cp.cantidad, cp.precio_unitario,
					cp.importe, cp.importe_iva, cp.total')
				->from('prospectos_productos AS cp')
					->join('productos AS p', 'p.id_producto = cp.id_producto', 'inner')
				->where("cp.id_prospecto = '".$_GET['id']."'")
				->get();
			$data_productos = $res->result();
			$res->free_result();
			
			//cliente
			$res = $this->db
				->select("cs.id_sucursal, cs.nombre_fiscal, (CASE cs.telefono WHEN '' THEN csc.telefono ELSE cs.telefono END) AS telefono, 
						csc.nombre, csc.puesto")
				->from('clientes_sucursales AS cs')
					->join('clientes_sucursales_contacto as csc', 'cs.id_sucursal = csc.id_sucursal', 'LEFT')
				->where("cs.id_sucursal = '".$data_cotiza->id_cliente."'")
				->order_by('csc.id_contacto', 'ASC')
				->limit(1)
			->get();
			$data_cliente = $res->row();
			$res->free_result();
			
			
			$this->load->library('mypdf');
			// Creación del objeto de la clase heredada
			$pdf = new MYpdf('P', 'mm', 'Letter');
			$pdf->show_head = false;
			$pdf->AddPage();
			$pdf->SetFont('Arial','',8);
			
			if(isset($_GET['membrete']))
				$pdf->Image(APPPATH.'images/h_memb.jpg', .5, 0, 215, 279);
			
			$limite_y = 242;
			$y = 40;
			$pdf->SetXY(188, $y);
			$pdf->Cell(20, 6, $data_cotiza->fecha, 0, 0, 'R');
			$pdf->SetXY(20, ($y += 5));
			$pdf->Cell(150, 6, 'MON-154-SCFI-2005 No. DICTAMEN UV: 3RS0076', 0, 0, 'C');
			$pdf->SetX(168);
			$pdf->Cell(40, 6, 'Pros: '.($data_cotiza->serie!=''? $data_cotiza->serie.'-': '').$data_cotiza->folio, 0, 0, 'R');
			
			$pdf->SetFont('Arial','B',9);
			$pdf->SetXY(6, ($y += 8));
			$pdf->Cell(40, 6, $data_cliente->nombre, 0, 0, 'L');
			$pdf->SetFont('Arial','',9);
			$pdf->SetXY(6, ($y += 5));
			$pdf->Cell(40, 6, $data_cliente->puesto.' '.$data_cliente->nombre_fiscal, 0, 0, 'L');
			$pdf->SetXY(6, ($y += 5));
			$pdf->Cell(40, 6, $data_cliente->telefono, 0, 0, 'L');
			
			$pdf->SetXY(6, ($y += 8));
			$pdf->Cell(40, 6, "AT'N", 0, 0, 'L');
			$pdf->SetXY(8, ($y += 10));
			$pdf->MultiCell(200, 5, "     Por medio de la presente ponemos a su consideración la presente cotización que en área de seguridad y protección personal nos solicitaron amablemente:", 0, 'L');
			
			$aligns = array('C', 'C', 'C', 'C');
			$widths = array(25, 109, 33, 33);
			$header = array('Cantidad', 'Descripción', 'Precio', 'Importe');
			foreach($data_productos as $key => $item){
				$band_head = false;
				if($pdf->GetY() >= $limite_y || $key==0){ //salta de pagina si exede el max
					if($key > 0){
						$this->addPagePDF($pdf);
					}
			
					$pdf->SetFont('Arial','B',8);
					$pdf->SetTextColor(255,255,255);
					$pdf->SetFillColor(160,160,160);
					$pdf->SetX(6);
					$pdf->SetAligns($aligns);
					$pdf->SetWidths($widths);
					$pdf->Row($header, true);
				}
					
				$pdf->SetFont('Arial','',8);
				$pdf->SetTextColor(0,0,0);
					
				$datos = array($item->cantidad, $item->nombre, 
						String::formatoNumero($item->precio_unitario),
						String::formatoNumero($item->importe));
			
				$pdf->SetX(6);
				$pdf->SetAligns($aligns);
				$pdf->SetWidths($widths);
				$pdf->Row($datos, false);
			}
			
			$pdf->SetXY(6, ($pdf->GetY()+10));
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->Cell(40, 6, "*Estos precios no incluyen IVA", 0, 0, 'L');
			
			$pdf->SetFont('Arial','B',8);
			$pdf->SetX(160);
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->Cell(45, 6, "Total: ".string::formatoNumero($data_cotiza->subtotal), 0, 0, 'R');
			
			$pdf->SetFont('Arial','',8);
			$pdf->SetXY(6, ($pdf->GetY()+14));
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->MultiCell(200, 5, "Agradeciendo de antemano la atención se sirvan dar a la presente quedamos a sus ordenes para cualquier aclaración o comentario al respecto y nos permite demostrar nuestro servicio que es nuestra especialidad.", 0, 'L');
			
			$pdf->SetXY(6, ($pdf->GetY()+14));
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->Cell(200, 6, "ATTE.", 0, 0, 'C');
			
			$pdf->SetXY(6, ($pdf->GetY()+4));
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->Cell(200, 6, "VÍCTOR HUGO JIMÉNEZ MAGAÑA", 0, 0, 'C');
			
			$pdf->SetXY(6, ($pdf->GetY()+4));
			if($pdf->GetY() >= $limite_y)
				$this->addPagePDF($pdf);
			$pdf->Cell(200, 6, "GERENTE", 0, 0, 'C');
			
			
			$pdf->Output('listas_de_precio.pdf', 'I');
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	private function addPagePDF(&$pdf){
		$pdf->AddPage();
		if(isset($_GET['membrete']))
			$pdf->Image(APPPATH.'images/h_memb.jpg', .5, 0, 215, 279);
		$pdf->SetY(45);
	}
	
	
	/**
	 * Configura los metodos de agregar y modificar
	 */
	private function configAddModCotizacion(){
		$this->load->library('form_validation');
		$rules = array(
			array('field'	=> 'did_cliente',
					'label'		=> 'Cliente',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'did_vendedor',
					'label'		=> 'Vendedor',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'dfolio',
					'label'		=> 'Folio',
					'rules'		=> 'required|numeric|callback_seriefolio_check'),
			array('field'	=> 'dfecha',
					'label'		=> 'Fecha',
					'rules'		=> 'required|max_length[10]|callback_isValidDate'),
			array('field'	=> 'dtsubtotal',
					'label'		=> 'SubTotal',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dtiva',
					'label'		=> 'IVA',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dttotal',
					'label'		=> 'Total',
					'rules'		=> 'required|numeric|callback_val_total'),
				
			array('field'	=> 'dserie',
					'label'		=> 'Serie',
					'rules'		=> 'max_length[8]'),
			array('field'	=> 'dcliente',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dvendedor',
					'label'		=> 'Vendedor',
					'rules'		=> ''),
			array('field'	=> 'dcliente_info',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dttotal_letra',
					'label'		=> 'letra',
					'rules'		=> '')
		);
		$this->form_validation->set_rules($rules);
	}
	/**
	 * Form_validation: Valida si el usuario ya esta usado por alguien mas
	 * @param unknown_type $str
	 */
	public function seriefolio_check($str){
		if($str != ''){
			$sql = '';
			if(isset($_GET['id']))
				$sql = " AND id_prospecto != '".$_GET['id']."'";
				
			$res = $this->db->select('Count(id_prospecto) AS num')
				->from('prospectos')
				->where("folio = ".$str."".$sql)
			->get();
			$data = $res->row();
			if($data->num > 0){
				$this->form_validation->set_message('seriefolio_check', 'El folio ya esta utilizado por otra cotizacion.');
				return false;
			}
		}
		return true;
	}
	/**
	 * Form_validation: Valida su una fecha esta en formato correcto
	 */
	public function isValidDate($str){
		if($str != ''){
			if(String::isValidDate($str) == false){
				$this->form_validation->set_message('isValidDate', 'El campo %s no es una fecha valida');
				return false;
			}
		}
		return true;
	}
	
	public function val_total($str){
		if($str <= 0){
			$this->form_validation->set_message('val_total', 'El Total no puede ser 0, verifica los datos ingresados.');
			return false;
		}
		return true;
	}
	
	
	/**
	 * Muestra mensajes cuando se realiza alguna accion
	 * @param unknown_type $tipo
	 * @param unknown_type $msg
	 * @param unknown_type $title
	 */
	private function showMsgs($tipo, $msg='', $title='Prospectos!'){
		switch($tipo){
			case 1:
				$txt = 'El campo ID es requerido.';
				$icono = 'error';
			break;
			case 2: //Cuendo se valida con form_validation
				$txt = $msg;
				$icono = 'error';
			break;
			case 3:
				$txt = 'El prospecto se modifico correctamente.';
				$icono = 'ok';
			break;
			case 4:
				$txt = 'El prospecto se agrego correctamente.';
				$icono = 'ok';
			break;
			case 5:
				$txt = 'El prospecto se cancelo correctamente.';
				$icono = 'ok';
			break;
			case 6:
				$txt = $msg;
				$icono = 'ok';
			break;
		}
		
		return array(
			'title' => $title,
			'msg' => $txt,
			'ico' => $icono);
	}
}

?>